class Solution {
public:
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    /*
    dp[i]表示走到第i个位置有多少种翻译
    case1:因为是1-26的转换，所以当num[i]='0'&&num[i-1]='1'或者‘2’，
    dp[i]=dp[i-2];如果i==1,dp[i]=1;
    case2:如果11-26(除20)这样的组合，dp[i]=dp[i-1]+dp[i-2];如果i==1,dp[i]=2;
    case3:如果是大于26的这种组合，dp[i]=dp[i-1];
    初始化dp[0]=1;
    */
    int solve(string nums) {
        // write code here
        if(nums[0]=='0')
            return 0;
        vector<int>dp(nums.size(),0);
        dp[0]=1;
        for(int i=1;i<nums.size();i++)
        {
            if(nums[i]=='0')
            {
                if(nums[i-1]=='1'||nums[i-1]=='2')
                {
                    if(i==1) dp[i]=1;
                    else dp[i]=dp[i-2];
                }
            }//11-26除20
            else if(nums[i-1]=='1'||(nums[i-1]=='2'&&nums[i]>='1'&&nums[i]<='6'))
            {
                if(i==1) dp[i]=2;
                else dp[i]=dp[i-1]+dp[i-2];
            }
            else //>26
                dp[i]=dp[i-1];
        }
        return dp[nums.size()-1];
    }
};